package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomFlag;
import br.com.telescope.adsrt.dom.DomId;
import br.com.telescope.adsrt.dom.DomInteger;
import br.com.telescope.adsrt.dom.DomOption;
import br.com.telescope.adsrt.dom.DomOptionRadio;
import br.com.telescope.adsrt.dom.DomUpper;
import br.com.telescope.adsrt.dom.DomWiki;
import br.com.telescope.adsrt.lib.*;
import br.com.telescope.adsrt.lib.AdsException;
import br.com.telescope.adsrt.lib.Field;
import br.com.telescope.adsrt.lib.Form;
import br.com.telescope.sql.ModelQuery;
import br.com.telescope.t2.EntityBinding;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.exception.Severity;
import br.com.telescope.t2.feature.DeleteFeature;
import br.com.telescope.t2.feature.InsertFeature;
import br.com.telescope.t2.feature.ListFeature;
import br.com.telescope.t2.feature.LookupFeature;
import br.com.telescope.t2.feature.UpdateFeature;
import br.com.telescope.t2.feature.ViewFeature;
import br.com.telescope.util.ObjectUtil;
import java.util.ArrayList;
import java.util.List;
import solutions.ferpa.ztest.ent.*;

/**
 * Itens da instrução.
 * <p>
 * Interface para manutenção de Item da instrução
 * <P>
 * Telescope origin: ZTEST.CAD_DETALHE_ITEM_INSTRUCAO
 * <P>
 * Base entity: ZTEST.ITEM_INSTRUCAO
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class CadDetalheItemInstrucao extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "ZTEST.CAD_DETALHE_ITEM_INSTRUCAO";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Itens da instrução");
    }
    
    protected EntItemInstrucao base;
    protected EntItemInstrucao iref;
    protected EntTipoItemInstrucao tipi;
    protected EntItemInstrucao rec; // NEED_TJW1_COMPATIBILITY
    
    // Service parameters
    private DomId pIdItemInstrucaoPai;
    private DomId pIdInstrucaoTrabalho;
    
    // Record items
    private DomUpper aSigla;
    private DomInteger aSequencia;
    private DomOption aAcaoAposResposta;
    private DomFlag aExigeConfirmacaoExecucao;
    private DomWiki aDescricao;
    private DomId aItemInstrucaoPaiId;
    private DomId aItemInstrucaoReferenciaId;
    private DomId aInstrucaoTrabalhoId;
    private DomId aTipoItemInstrucaoId;
    private DomId aId;
    private DomUpper aIrefSigla;
    private DomOption aTipiNome;
    private DomOptionRadio aTipiCaracteristicaItemInstrucao;
    
    // Query items
    
    @Override
    public void copyDefaultValues() {
        copyDefaultValue(base.getExigeConfirmacaoExecucao(), aExigeConfirmacaoExecucao);
    }
    
    @Override
    public String getBaseSql() {
        return "select BASE.*"
                + " , IREF.SIGLA as IREF_SIGLA"
                + " , TIPI.NOME as TIPI_NOME"
                + " , TIPI.CARACTERISTICA_ITEM_INSTRUCAO as TIPI_CARACTERISTICA_ITEM_INSTRUCAO"
                + " , IREF.ID as Z_IREF_ID"
                + " , TIPI.ID as Z_TIPI_ID"
                + " from ITEM_INSTRUCAO BASE"
                + " left join ITEM_INSTRUCAO IREF on IREF.ID = BASE.ITEM_INSTRUCAO_REFERENCIA_ID"
                + " join TIPO_ITEM_INSTRUCAO TIPI on TIPI.ID = BASE.TIPO_ITEM_INSTRUCAO_ID";
    }
    
    @Override
    public String getBaseSqlWhereClause() {
        
        return " where base.tipo_item_instrucao_id in"
                + " (select tipi.id from TIPO_ITEM_INSTRUCAO tipi where tipi.CARACTERISTICA_ITEM_INSTRUCAO in ('O', 'R'))";
    }
    
    @Override
    public void initAttributes() {
        
        aSigla = new DomUpper();
        aSigla.context(ctx).name("SIGLA").label("Sigla de identificação do item");
        
        aSequencia = new DomInteger();
        aSequencia.context(ctx).name("SEQUENCIA").label("Sequência do item da instrução");
        
        aAcaoAposResposta = new DomOption();
        aAcaoAposResposta.context(ctx).name("ACAO_APOS_RESPOSTA").label("Ação após resposta do operador").group(true);
        aAcaoAposResposta.addOption("A", "Avançar 1 item");
        aAcaoAposResposta.addOption("R", "Retornar 1 item");
        aAcaoAposResposta.addOption("P", "Pular para um item");
        aAcaoAposResposta.addOption("I", "Interromper");
        aAcaoAposResposta.addOption("T", "Cronometrar");
        aAcaoAposResposta.addOption("V", "Reiniciar (executar novamente)");
        aAcaoAposResposta.setDefaultValue("A");
        
        aExigeConfirmacaoExecucao = new DomFlag();
        aExigeConfirmacaoExecucao.context(ctx).name("EXIGE_CONFIRMACAO_EXECUCAO").label("Exige confirmação de execução");
        aExigeConfirmacaoExecucao.setDefaultValue("S");
        
        aDescricao = new DomWiki();
        aDescricao.context(ctx).name("DESCRICAO").label("Descrição do item da instrução");
        
        aItemInstrucaoPaiId = new DomId();
        aItemInstrucaoPaiId.context(ctx).name("ITEM_INSTRUCAO_PAI_ID").label("Item da instrução (pai)");
        
        aItemInstrucaoReferenciaId = new DomId();
        aItemInstrucaoReferenciaId.context(ctx).name("ITEM_INSTRUCAO_REFERENCIA_ID").label("Item da instrução (referência)");
        
        aInstrucaoTrabalhoId = new DomId();
        aInstrucaoTrabalhoId.context(ctx).name("INSTRUCAO_TRABALHO_ID").label("Instrução de trabalho");
        
        aTipoItemInstrucaoId = new DomId();
        aTipoItemInstrucaoId.context(ctx).name("TIPO_ITEM_INSTRUCAO_ID").label("Tipo do item da instrução");
        
        aId = new DomId();
        aId.context(ctx).name("ID").label("Id");
        
        aIrefSigla = new DomUpper();
        aIrefSigla.context(ctx).name("IREF_SIGLA").label("Sigla de identificação do item");
        aIrefSigla.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT SIGLA as valor"
                + " , SIGLA as pesquisar"
                + " , SIGLA as descricao"
                + " from ITEM_INSTRUCAO IREF"
                + " where iref.tipo_item_instrucao_id in (select t.id from tipo_item_instrucao t where t.caracteristica_item_instrucao in ('I')))", "q"));
        aIrefSigla.setAutocompleteLength(2);
        
        aTipiNome = new DomOption();
        aTipiNome.context(ctx).name("TIPI_NOME").label("Nome do tipo da instrução").group(true);
        
        aTipiNome.setSqlOptions("SELECT NOME, NOME FROM TIPO_ITEM_INSTRUCAO TIPI WHERE tipi.CARACTERISTICA_ITEM_INSTRUCAO in ('O', 'R') ORDER BY 1");
        
        aTipiCaracteristicaItemInstrucao = new DomOptionRadio();
        aTipiCaracteristicaItemInstrucao.context(ctx).name("TIPI_CARACTERISTICA_ITEM_INSTRUCAO").label("Característica do item da instrução").group(true);
        aTipiCaracteristicaItemInstrucao.addOption("I", "Item da Instrução ");
        aTipiCaracteristicaItemInstrucao.addOption("E", "Etapa (agrupador de itens)");
        aTipiCaracteristicaItemInstrucao.addOption("O", "Observação para um item");
        aTipiCaracteristicaItemInstrucao.addOption("R", "Opção de resposta");
        
    }
    
    @Override
    public void initParameters() {
        pIdItemInstrucaoPai = new DomId(ctx, "ID_ITEM_INSTRUCAO_PAI", "Item da instrução (pai)");
        pIdItemInstrucaoPai.setValue(ctx.getParameter("P_ID_ITEM_INSTRUCAO_PAI"));
        pIdItemInstrucaoPai.setSqlExpression("ITEM_INSTRUCAO_PAI_ID");
        if (pIdItemInstrucaoPai.isNotNull()) {
            aItemInstrucaoPaiId.setValue(pIdItemInstrucaoPai.getValue());
        }
        pIdInstrucaoTrabalho = new DomId(ctx, "ID_INSTRUCAO_TRABALHO", "Instrução de trabalho");
        pIdInstrucaoTrabalho.setValue(ctx.getParameter("P_ID_INSTRUCAO_TRABALHO"));
        pIdInstrucaoTrabalho.setSqlExpression("INSTRUCAO_TRABALHO_ID");
        if (pIdInstrucaoTrabalho.isNotNull()) {
            aInstrucaoTrabalhoId.setValue(pIdInstrucaoTrabalho.getValue());
        }
    }
    
    @Override
    public List<Field> getParameters() {
        if (allParameters == null) {
            allParameters = new ArrayList<Field>();
            allParameters.add(pIdItemInstrucaoPai);
            allParameters.add(pIdInstrucaoTrabalho);
        }
        return allParameters;
    }
    
    @Override
    public void copyBindParameters() {
        EntItemInstrucao record = getRecord();
        if (pIdItemInstrucaoPai.isNotNull()) {
            record.setItemInstrucaoPaiId(pIdItemInstrucaoPai.getValue());
        }
        if (pIdInstrucaoTrabalho.isNotNull()) {
            record.setInstrucaoTrabalhoId(pIdInstrucaoTrabalho.getValue());
        }
    }
    
    @Override
    public void retrieveBindParameters() {
        pIdItemInstrucaoPai.setValue(getRecord().valueOfItemInstrucaoPaiId());
        pIdInstrucaoTrabalho.setValue(getRecord().valueOfInstrucaoTrabalhoId());
    }
    
    @Override
    public void initEntityBindings() {
        EntityBinding binding;
        
        binding = new EntityBinding("ZTEST.ITEM_INSTRUCAO", "IREF", "Z_IREF_ID", "ZTEST.CAD_ITEM_INSTRUCAO.VIEW");
        binding.addFields(aIrefSigla);
        entityBindings.add(binding);
    }
    
    @Override
    public String getQueryPkColumn() {
        return "BASE.ID";
    }
    
    @Override
    public void setId(String value) {
        this.aId.setValue(value);
    }
    
    @Override
    public EntItemInstrucao getRecord() {
        if (base == null) {
            base = new EntItemInstrucao(ctx);
            rec = base;
        }
        return this.base;
    }
    
    @Override
    public String getContextName() {
        return aSigla.toText();
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "SIGLA, TIPI_NOME, SEQUENCIA, IREF_SIGLA";
    }
    
    @Override
    public void translateInsertFks(Form form) {
        ModelQuery query;
        
        // ITEM_INSTRUCAO_REFERENCIA_ID
        try {
            if (form.hasFields("IREF_SIGLA")) {
                query = createQuery()
                        .select("IREF.ID")
                        .from("ITEM_INSTRUCAO", "IREF")
                        .where("iref.tipo_item_instrucao_id in (select t.id from tipo_item_instrucao t where t.caracteristica_item_instrucao in ('I'))")
                        .filter("IREF.SIGLA", form.get("IREF_SIGLA"))
                        ;
                base.setItemInstrucaoReferenciaId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
        
        // TIPO_ITEM_INSTRUCAO_ID
        try {
            if (form.hasFields("TIPI_NOME")) {
                query = createQuery()
                        .select("TIPI.ID")
                        .from("TIPO_ITEM_INSTRUCAO", "TIPI")
                        .where("tipi.CARACTERISTICA_ITEM_INSTRUCAO in ('O', 'R')")
                        .filter("TIPI.NOME", form.get("TIPI_NOME"))
                        ;
                base.setTipoItemInstrucaoId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
    }
    
    @Override
    public void translateUpdateFks(Form form) {
        ModelQuery query;
        
        // ITEM_INSTRUCAO_REFERENCIA_ID
        try {
            if (form.hasFields("IREF_SIGLA")) {
                query = createQuery()
                        .select("IREF.ID")
                        .from("ITEM_INSTRUCAO", "IREF")
                        .where("iref.tipo_item_instrucao_id in (select t.id from tipo_item_instrucao t where t.caracteristica_item_instrucao in ('I'))")
                        .filter("IREF.SIGLA", form.get("IREF_SIGLA"))
                        ;
                base.setItemInstrucaoReferenciaId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
        
        // TIPO_ITEM_INSTRUCAO_ID
        try {
            if (form.hasFields("TIPI_NOME")) {
                query = createQuery()
                        .select("TIPI.ID")
                        .from("TIPO_ITEM_INSTRUCAO", "TIPI")
                        .where("tipi.CARACTERISTICA_ITEM_INSTRUCAO in ('O', 'R')")
                        .filter("TIPI.NOME", form.get("TIPI_NOME"))
                        ;
                base.setTipoItemInstrucaoId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="LIST">
    public class FList extends ListFeature {
        
        @Override
        public void initForm() {
            addField(aSigla, "view");
            addField(aTipiNome, "view");
            addField(aSequencia, "view");
            addField(aIrefSigla, "view");
            addField(aExigeConfirmacaoExecucao, "view");
        }
        
        {
            setFeatureName("LIST");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="VIEW">
    public class FView extends ViewFeature {
        
        @Override
        public void initForm() {
            addField(aSigla, "view");
            addField(aTipiNome, "view");
            addField(aSequencia, "view");
            addField(aAcaoAposResposta, "view");
            addField(aIrefSigla, "view");
            addField(aExigeConfirmacaoExecucao, "view");
            addField(aDescricao, "view");
        }
        
        {
            setFeatureName("VIEW");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="INSERT">
    public class FInsert extends InsertFeature {
        
        @Override
        public void initForm() {
            aTipiNome.setOptional(false);
            addField(aTipiNome, "rqd");
            aSequencia.setOptional(false);
            addField(aSequencia, "rqd");
            addField(aAcaoAposResposta, "opt");
            addField(aIrefSigla, "opt");
            addField(aExigeConfirmacaoExecucao, "opt");
            aDescricao.setOptional(false);
            addField(aDescricao, "rqd");
            registerEvent("ON_CHANGE", "TIPI_NOME", "desabilitarCamposConformeTipoInstrucao");
            registerEvent("ON_CHANGE", "ACAO_APOS_RESPOSTA", "desabilitarCamposConformeResposta");
        }
        
        {
            setFeatureName("INSERT");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="UPDATE">
    public class FUpdate extends UpdateFeature {
        
        @Override
        public void initForm() {
            aSigla.setEditable(false);
            addField(aSigla, "view");
            aTipiNome.setOptional(false);
            addField(aTipiNome, "rqd");
            aSequencia.setOptional(false);
            addField(aSequencia, "rqd");
            aAcaoAposResposta.setOptional(false);
            addField(aAcaoAposResposta, "rqd");
            addField(aIrefSigla, "opt");
            addField(aExigeConfirmacaoExecucao, "opt");
            aDescricao.setOptional(false);
            addField(aDescricao, "rqd");
        }
        
        @Override
        public void preDisplay() {
            try {
                desabilitarCamposConformeResposta();
                desabilitarCamposConformeTipoInstrucao();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("UPDATE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="DELETE">
    public class FDelete extends DeleteFeature {
        
        @Override
        public void initForm() {
            addField(aSigla, "view");
            addField(aTipiNome, "view");
            addField(aSequencia, "view");
        }
        
        {
            setFeatureName("DELETE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="IREF_SIGLA_LOOKUP">
    public class FIrefSiglaLookup extends LookupFeature {
        
        @Override
        public void initForm() {
            aIrefSigla.setEditable(true);
            addField(aIrefSigla, "opt");
        }
        
        @Override
        public ModelQuery getLookupQuery() {
            return createQuery()
                    .select("IREF.SIGLA as IREF_SIGLA")
                    .from("ITEM_INSTRUCAO", "IREF")
                    .where("iref.tipo_item_instrucao_id in (select t.id from tipo_item_instrucao t where t.caracteristica_item_instrucao in ('I'))")
                    ;
        }
        
        {
            setFeatureName("IREF_SIGLA_LOOKUP");
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="TIPI_NOME_LOOKUP">
    public class FTipiNomeLookup extends LookupFeature {
        
        @Override
        public void initForm() {
            aTipiNome.setEditable(true);
            addField(aTipiNome, "opt");
            aTipiCaracteristicaItemInstrucao.setEditable(false);
            addField(aTipiCaracteristicaItemInstrucao, "view");
        }
        
        @Override
        public ModelQuery getLookupQuery() {
            return createQuery()
                    .select("TIPI.NOME as TIPI_NOME")
                    .select("TIPI.CARACTERISTICA_ITEM_INSTRUCAO as TIPI_CARACTERISTICA_ITEM_INSTRUCAO")
                    .from("TIPO_ITEM_INSTRUCAO", "TIPI")
                    .where("tipi.CARACTERISTICA_ITEM_INSTRUCAO in ('O', 'R')")
                    ;
        }
        
        {
            setFeatureName("TIPI_NOME_LOOKUP");
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FList());
        addFeature(new FView());
        addFeature(new FInsert());
        addFeature(new FUpdate());
        addFeature(new FDelete());
        addFeature(new FIrefSiglaLookup());
        addFeature(new FTipiNomeLookup());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "LIST";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public String getSigla() {
        return aSigla.getValue();
    }
    
    public void setSigla(String value) {
        this.aSigla.setValue(value);
    }
    
    public Integer getSequencia() {
        return aSequencia.getValue();
    }
    
    public void setSequencia(Integer value) {
        this.aSequencia.setValue(value);
    }
    
    public String getAcaoAposResposta() {
        return aAcaoAposResposta.getValue();
    }
    
    public void setAcaoAposResposta(String value) {
        this.aAcaoAposResposta.setValue(value);
    }
    
    public String getExigeConfirmacaoExecucao() {
        return aExigeConfirmacaoExecucao.getValue();
    }
    
    public void setExigeConfirmacaoExecucao(String value) {
        this.aExigeConfirmacaoExecucao.setValue(value);
    }
    
    public String getDescricao() {
        return aDescricao.getValue();
    }
    
    public void setDescricao(String value) {
        this.aDescricao.setValue(value);
    }
    
    public Long getItemInstrucaoPaiId() {
        return aItemInstrucaoPaiId.getValue();
    }
    
    public void setItemInstrucaoPaiId(Long value) {
        this.aItemInstrucaoPaiId.setValue(value);
    }
    
    public Long getItemInstrucaoReferenciaId() {
        return aItemInstrucaoReferenciaId.getValue();
    }
    
    public void setItemInstrucaoReferenciaId(Long value) {
        this.aItemInstrucaoReferenciaId.setValue(value);
    }
    
    public Long getInstrucaoTrabalhoId() {
        return aInstrucaoTrabalhoId.getValue();
    }
    
    public void setInstrucaoTrabalhoId(Long value) {
        this.aInstrucaoTrabalhoId.setValue(value);
    }
    
    public Long getTipoItemInstrucaoId() {
        return aTipoItemInstrucaoId.getValue();
    }
    
    public void setTipoItemInstrucaoId(Long value) {
        this.aTipoItemInstrucaoId.setValue(value);
    }
    
    @Override
    public Long getId() {
        return aId.getValue();
    }
    
    public void setId(Long value) {
        this.aId.setValue(value);
    }
    
    public String getIrefSigla() {
        return aIrefSigla.getValue();
    }
    
    public void setIrefSigla(String value) {
        this.aIrefSigla.setValue(value);
    }
    
    public String getTipiNome() {
        return aTipiNome.getValue();
    }
    
    public void setTipiNome(String value) {
        this.aTipiNome.setValue(value);
    }
    
    public String getTipiCaracteristicaItemInstrucao() {
        return aTipiCaracteristicaItemInstrucao.getValue();
    }
    
    public void setTipiCaracteristicaItemInstrucao(String value) {
        this.aTipiCaracteristicaItemInstrucao.setValue(value);
    }
    
    public Long getParameterIdItemInstrucaoPai() {
        return pIdItemInstrucaoPai.getValue();
    }
    
    public void setParameterIdItemInstrucaoPai(Long value) {
        pIdItemInstrucaoPai.setValue(value);
        aItemInstrucaoPaiId.setValue(value);
    }
    
    public Long getParameterIdInstrucaoTrabalho() {
        return pIdInstrucaoTrabalho.getValue();
    }
    
    public void setParameterIdInstrucaoTrabalho(Long value) {
        pIdInstrucaoTrabalho.setValue(value);
        aInstrucaoTrabalhoId.setValue(value);
    }
    // </editor-fold>
    
    /**
     * Desabilitar campos conforme resposta.
     */
    public void desabilitarCamposConformeResposta() throws AdsException {
        // <user-code id="20882168" parentId="20882161" hashcode="-3d94f273" length="445">
        // import br.com.telescope.t2.exception.Severity;
        
        ctx.readFields(aAcaoAposResposta);
        
        if (aAcaoAposResposta.isNotNull()) {
            aIrefSigla.setEditable(aAcaoAposResposta.getValue().equals("P"));
            aIrefSigla.setRequired(aAcaoAposResposta.getValue().equals("P"));
        } else {
            aAcaoAposResposta.setErrorMessage("Opção para ação após a responsta do operador está inválida ou não foi informada!");
            aAcaoAposResposta.requestFocus();
        }
        // </user-code>
    }
    
    /**
     * Desabilitar campos conforme tipo da instrução.
     */
    public void desabilitarCamposConformeTipoInstrucao() throws AdsException {
        // <user-code id="20882188" parentId="20882178" hashcode="73758a5f" length="762">
        // import br.com.telescope.t2.exception.Severity;
        
        ctx.readFields(aTipiNome);
        
        if (aTipiNome.isNotNull()) {
            EntTipoItemInstrucao tipo = new EntTipoItemInstrucao(ctx);
            try {
                tipo.findByNome(aTipiNome.getValue());
        
                //R -	Regra para controle - Representa uma regra para um item de instrução de trabalho.
                aIrefSigla.setEditable(false);
                aIrefSigla.setRequired(false);
            } catch (RecordNotFoundException e) {
                ctx.pushError(GLOBAL_NAME + ".TIPO_NAO_CADASTRADO",
                        Severity.ERROR,
                        "Tipo do item da instrução informado não cadastrado!");
            }
        } else {
            aTipiNome.setErrorMessage("Tipo do item da instrução inválido ou não informado!");
            aTipiNome.requestFocus();
        }
        // </user-code>
    }
    
    @Override
    public String getJsServiceFile() {
        return "ui/ztest/cad_detalhe_item_instrucao.js";
    }
}
